package com.movecar.application;

import java.util.Set;

import android.app.Application;
import android.content.Context;
import android.util.DisplayMetrics;
import android.util.Log;
import android.widget.TextView;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.TagAliasCallback;
import cn.sharesdk.framework.ShareSDK;

import com.baidu.location.GeofenceClient;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.movecar.utils.DataStore;
import com.movecar.utils.imageloader.Constants;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.tencent.mid.api.MidService;
import com.tencent.stat.StatConfig;
import com.tencent.stat.StatReportStrategy;
import com.tencent.stat.StatService;

/**
 * For developer startup JPush SDK
 * 
 * 一般建议在自定义 Application 类里初始化。也可以在主 Activity 里。
 */
public class MainApplication extends Application {

	// private HttpClient httpClient;

	/** 注册百度地图用 */
	public LocationClient mLocationClient;
	public GeofenceClient mGeofenceClient;
	public TextView mLocationResult;

	private static final String TAG = "MainApplication";
	public static int screenWidth;
	public static int screenHeight;
	public static int screenWidthDip;
	public static int screenHeightDip;
	TagAliasCallback callback;
	int responseCode;
	String alias;
	Set<String> tags;
	public static Context contex;
	int a;

	@Override
	public void onCreate() {

		initMTAConfig(false);
		ImageLoader.getInstance().init(Constants.imageLoaderConfiguration(this));

		super.onCreate();

		// 上传MTA
		StatService.trackCustomEvent(this, "login", "true");
		String mid = MidService.getMid(getApplicationContext()); 
		// 操作MID，如上报服务器或识别用户。 
		// 注意：一台设备新运行本接口时，即本地不存在MID时，返回字符串“0”
		  Log.d("MID", "get Mid:" + mid); 

		// JPushInterface.setDebugMode(true); // 设置开启日志,发布时请关闭日志
		JPushInterface.init(this); // 初始化 JPush
		// 初始化shareSDK
		ShareSDK.initSDK(this);
		ShareSDK.setConnTimeout(5000);
		ShareSDK.setReadTimeout(10000);
		JPushInterface.setAliasAndTags(this, mid, null,
				callback = new TagAliasCallback() {

					@Override
					public void gotResult(int arg0, String arg1, Set<String> arg2) {

						a = arg0;
						alias = arg1;
						tags = arg2;
					}
				});

		/** 注册百度地图用参数 */
		mLocationClient = new LocationClient(getApplicationContext());
		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式
		option.setIsNeedAddress(true);// 返回的定位结果包含地址信息
		option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向
		mLocationClient.setLocOption(option);
		mGeofenceClient = new GeofenceClient(this);

		// 获取屏幕密度
		DisplayMetrics dm = new DisplayMetrics();
		dm = getResources().getDisplayMetrics();
		float density = dm.density; // 屏幕密度（像素比例：0.75/1.0/1.5/2.0）
		screenWidthDip = dm.widthPixels; // 屏幕宽（dip，如：320dip）
		screenHeightDip = dm.heightPixels;
		screenWidth = (int) (dm.widthPixels * density + 0.5f); // 屏幕宽（px，如：480px）
		screenHeight = (int) (dm.heightPixels * density + 0.5f); // 屏幕高（px，如：800px）
	}

	public LocationClient getLocationClient() {

		return mLocationClient;
	}

	/**
	 * 根据不同的模式，建议设置的开关状态，可根据实际情况调整，仅供参考。
	 * 
	 * @param isDebugMode
	 *            根据调试或发布条件，配置对应的MTA配置
	 */
	private void initMTAConfig(boolean isDebugMode) {
		if (isDebugMode) { // 调试时建议设置的开关状态
			// 查看MTA日志及上报数据内容
			StatConfig.setDebugEnable(true);
			// 禁用MTA对app未处理异常的捕获，方便开发者调试时，及时获知详细错误信息。
			// StatConfig.setAutoExceptionCaught(false);
			// StatConfig.setEnableSmartReporting(false);
			// Thread.setDefaultUncaughtExceptionHandler(new
			// UncaughtExceptionHandler() {
			//
			// @Override
			// public void uncaughtException(Thread thread, Throwable ex) {
			// logger.error("setDefaultUncaughtExceptionHandler");
			// }
			// });
			// 调试时，使用实时发送
			// StatConfig.setStatSendStrategy(StatReportStrategy.BATCH);
			// // 是否按顺序上报
			// StatConfig.setReportEventsByOrder(false);
			// // 缓存在内存的buffer日志数量,达到这个数量时会被写入db
			// StatConfig.setNumEventsCachedInMemory(30);
			// // 缓存在内存的buffer定期写入的周期
			// StatConfig.setFlushDBSpaceMS(10 * 1000);
			// // 如果用户退出后台，记得调用以下接口，将buffer写入db
			// StatService.flushDataToDB(getApplicationContext());

			// StatConfig.setEnableSmartReporting(false);
			// StatConfig.setSendPeriodMinutes(1);
			// StatConfig.setStatSendStrategy(StatReportStrategy.PERIOD);
		} else { // 发布时，建议设置的开关状态，请确保以下开关是否设置合理
			// 禁止MTA打印日志
			StatConfig.setDebugEnable(false);
			// 根据情况，决定是否开启MTA对app未处理异常的捕获
			StatConfig.setAutoExceptionCaught(true);
			// 选择默认的上报策略
			StatConfig.setStatSendStrategy(StatReportStrategy.APP_LAUNCH);
		}
	}

}